package cn.hxsteel.purview.module.purview;

import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Service;

import cn.hxsteel.purview.core.base.BaseService;
import cn.hxsteel.purview.core.tool.PurviewTool;
import cn.hxsteel.purview.model.bo.ActionBO;
import cn.hxsteel.purview.model.bo.ModuleBO;
import cn.hxsteel.purview.model.dao.RoleActionDAO;
import cn.hxsteel.purview.model.dao.RoleDAO;
import cn.hxsteel.purview.model.po.RolePO;

/**
 * 权限模块的服务类
 */
@Service
class PurviewService extends BaseService
{
    @Autowired
    private RoleDAO       _roleDAO;
    @Autowired
    private RoleActionDAO _roleActionDAO;
    @Autowired
    EhCacheCacheManager   _cacheManager;
    
    @PostConstruct
    public void init()
    {
	PurviewTool.init();
    }
    
    /* 模块查询
    --------------------------------------------------*/
    
    /**
     * 获取指定用户标识的模块业务对象的列表
     * 
     * @param uid 用户标识
     * @return
     */
    public List< ModuleBO > getUserModuleBOList( int uid )
    {
	return null;
    }
    
    /**
     * 查询指定角色拥有可操作模块的标识的键集
     * 
     * @param roleID 角色标识
     * @return
     */
    public Set< Integer > getRoleModuleIDSet( int roleID )
    {
	return null;
    }
    
    /**
     * 获取指定用户标识的地图<模块标识,动作值对象的列表>
     * 
     * @param uid 用户标识
     * @return
     */
    public Map< Integer, List< ActionBO > > getUserActionVOListMap( int uid )
    {
	return null;
    }
    
    /**
     * 获取指定角色标识的动作标识的键集
     * 
     * @param roleID 角色标识
     * @return
     */
    public Set< Integer > getRoleActionIDSet( int roleID )
    {
	return null;
    }
    
    /**
     * 查询指定模块的拥有可操作的动作名称标识的键集
     * 
     * @param moduleID 模块标识
     * @return
     */
    public Set< Integer > getModuleActionNameIDSet( int moduleID )
    {
	return null;
    }
    
    /* 上：权限；下：角色
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    
    /* 角色查询
    --------------------------------------------------*/
    
    /**
     * 查询指定用户标识创建的角色的持久对象的列表
     * 
     * @param uid 用户标识
     * @return
     */
    public List< RolePO > selUserRolePOList( int uid )
    {
	return _roleDAO.selCreateList( uid );
    }
    
    /**
     * 查询角色的持久对象
     * 
     * @param roleID 角色标识
     * @return
     */
    public RolePO selRolePO( short roleID )
    {
	return _roleDAO.load( roleID );
    }
    
    /* 角色添加
    --------------------------------------------------*/
    
    /**
     * 添加角色的持久对象
     * 
     * @param rolelePO 角色的持久对象
     */
    public void addRolePO( RolePO rolePO )
    {
	_roleDAO.save( rolePO );
    }
    
    /* 角色修改
    --------------------------------------------------*/
    
    /**
     * 修改角色的持久对象
     * 
     * @param rolePO 角色的持久对象
     */
    public void updRolePO( RolePO rolePO )
    {
	_roleDAO.update( rolePO );
    }
    
    /**
     * 设置角色的权限数据
     * 
     * @param roleID 角色标识
     * @param actionIDGroup 动作标识组
     */
    public void setRolePermitData( int roleID, String actionIDGroup )
    {
	_roleActionDAO.chgRoleActionIDGroup( roleID, actionIDGroup );
    }
    
    /* 内部类
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    
    /**
     * 模块业务类的比较器
     */
    public static class PurviewBOCompator implements Comparator< ModuleBO >
    {
	private static PurviewBOCompator _moduleBoCompator;
	
	public static PurviewBOCompator create()
	{
	    if ( _moduleBoCompator == null )
	    {
		_moduleBoCompator = new PurviewBOCompator();
	    }
	    return _moduleBoCompator;
	}
	
	@Override
	public int compare( ModuleBO o1, ModuleBO o2 )
	{
	    return o1.compareTo( o2 );
	}
    }
}